{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 4. Exploring Scipy and other python packages" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are things which, as scientists, we are all likely to need to do at some point which we haven't covered yet e.g. fitting a function to some data. However, the challenge with a module like this is that one could spend forever looking in depth at different python packages of which there are quadrillions! The problem with this is twofold:\n", "\n", "- You'll probably use very little of the small subset of things we look at\n", "- You probably will need some things that we don't look at!\n", "\n", "Up to this point we've tried to provide you with a good grounding in fundamental concepts in both python and foundational packages like numpy, matplotlib. This grounding means you can understand good documentation and therefore can take advantage of packages which you've never used before. Ultimately becoming a good programmer is about using what you do know to teach yourself new things as and when you need them. This isn't always easy but it is ultimately about practise (programming is a skill)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4.1 Scipy\n", "\n", "Perhaps the most famous package we have yet to cover is scipy. This has a wide range of scientific and numerical computing tools with specialist modules which cover different areas:\n", "\n", " scipy.integrate: Integration techniques and solvers for ordinary differential equations.\n", " scipy.optimize: Optimization algorithms for finding the minimum or maximum of functions.\n", " scipy.stats: Statistical distributions, hypothesis testing, and descriptive statistics.\n", " scipy.linalg: Linear algebra operations and matrix decompositions.\n", " scipy.signal: Signal processing tools such as filtering, spectral analysis, and wavelet transforms.\n", " scipy.sparse: Sparse matrix data structures and linear algebra operations on sparse matrices.\n", " scipy.interpolate: Interpolation techniques for 1-D and N-D data.\n", " scipy.special: Special mathematical functions like Bessel functions, gamma functions, etc.\n", "\n", "In the case of SciPy there is also a very useful resource called the SciPy Cookbook which gives many examples of solving common scientific problems using Scipy and related libraries. I recommend at this point having a quick flick through this page to get a sense of the range of problems scipy can be used to solve.\n", "\n", "We will cover two common tasks (curve fitting, numeical integration) but leave you more exercises. In solving these problems we will try to explain the process we go through in understanding how to use the packages that are available. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.1.1 Example 1 - Curve fitting with Scipy\n", "\n", "Suppose our experiment produces a noisy periodic signal which our model suggests should be a 2Hz sin wave centred around y=0 but with unknown amplitude or phase." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Signal')" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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aPbee2+zfv36Tk+U2Q/X2Q/XaEx/XCeusTv0w3X2wzUak/06rbVm06ZNZq+99jKDg3rkTF95agYHB82SJUtK2/+CBQs6XRgd/XCd/XCNxvTHdeIau0M/XGc/XKMx2a7T56FxIFAYAAAAAJ0AogYAAAAAnQCipgDmzZtnxsbGzLx58+o+lVLph+vsh2s0pj+uE9fYHfrhOvvhGo0p/zr7KlAYAAAAAN0FnhoAAAAAdAKIGgAAAAB0AogaAAAAAHQCiBoAAAAAdAKImkg+//nPm2XLlpn58+ebo446ytx8883e9W+88UZz1FFHmfnz55t9993XfPGLX6zoTPORcp3f+ta3zCtf+Uqz6667mgULFphjjjnGfP/736/wbLOR+iwdt956q5kzZ4454ogjyj3BAki9xsnJSXPBBReYpUuXmnnz5pn99tvPfPWrX63obLOTep1XXHGFOfzww80OO+xg9txzT/OOd7zD/P73v6/obNO56aabzOtf/3qz1157mYGBAfPtb387uE3bbE/qNbbV7mR5lo622J4s11i07YGoieDqq682Z599trngggvMunXrzPHHH29e85rXmIcfflhc/4EHHjCvfe1rzfHHH2/WrVtnzj//fHPWWWeZf//3f6/4zNNIvc6bbrrJvPKVrzTXXXedueOOO8wrXvEK8/rXv96sW7eu4jOPJ/UaHRs2bDBvf/vbzQknnFDRmWYnyzW+6U1vMj/60Y/MZZddZn7xi1+YK6+80hx88MEVnnU6qdd5yy23mLe//e3mne98p/n5z39uvvnNb5rbbrvNvOtd76r4zON5+umnzeGHH24+97nPRa3fRtuTeo1ttDvGpF+no022J8s1Fm57LAhy9NFH2zPPPLNn2cEHH2zPPfdccf2Pfexj9uCDD+5Z9rd/+7f2ZS97WWnnWASp1ynxwhe+0F544YVFn1phZL3GN7/5zfYTn/iEHRsbs4cffniJZ5if1Gv87ne/axcuXGh///vfV3F6hZF6nf/4j/9o9913355ln/nMZ+ySJUtKO8ciMcbYa6+91rtOW22PI+YaJZpudzgp19km20OJucYybA88NQE2b95s7rjjDvOqV72qZ/mrXvUq8+Mf/1jc5ic/+cms9U866SRz++23m//3//5faeeahyzXydm2bZvZtGmTed7znlfGKeYm6zVefvnl5v777zdjY2Nln2Juslzjf/zHf5jly5ebT37yk+YFL3iBOfDAA81HP/pR8+yzz1ZxypnIcp3HHnuseeSRR8x1111nrLXmiSeeMNdcc4153eteV8UpV0IbbU9emm538tAm25OFMmxPX01omYWnnnrKbN261ey+++49y3fffXfz29/+Vtzmt7/9rbj+li1bzFNPPWX23HPP0s43K1muk/OpT33KPP300+ZNb3pTGaeYmyzX+Ktf/cqce+655uabbzZz5jT/dclyjb/5zW/MLbfcYubPn2+uvfZa89RTT5n3ve995g9/+ENj42qyXOexxx5rrrjiCvPmN7/ZPPfcc2bLli3m5JNPNp/97GerOOVKaKPtyUvT7U5W2mZ7slCG7YGnJpKBgYGe79baWctC60vLm0bqdTquvPJKs3r1anP11Veb3XbbrazTK4TYa9y6dav5m7/5G3PhhReaAw88sKrTK4SU57ht2zYzMDBgrrjiCnP00Ueb1772tebTn/60+Zd/+ZdGe2uMSbvOe++915x11llm1apV5o477jDf+973zAMPPGDOPPPMKk61Mtpqe7LQJruTQpttTwpl2J5uyr8Cef7zn2+GhoZmtf6efPLJWS0ixx577CGuP2fOHLN48eLSzjUPWa7TcfXVV5t3vvOd5pvf/KY58cQTyzzNXKRe46ZNm8ztt99u1q1bZz7wgQ8YY6ZeQmutmTNnjrn++uvN6OhoJeceS5bnuOeee5oXvOAFZuHChdPLDjnkEGOtNY888og54IADSj3nLGS5zksuucQcd9xx5pxzzjHGGPPiF7/Y7Ljjjub44483F110USe8GG20PVlpi93JQhttTxbKsD3w1ASYO3euOeqoo8wPfvCDnuU/+MEPzLHHHituc8wxx8xa//rrrzfLly832223XWnnmocs12nMVEvp9NNPN9/4xjcaH5uQeo0LFiwwP/vZz8ydd945/TnzzDPNQQcdZO68807z0pe+tKpTjybLczzuuOPMY489Zv70pz9NL/vlL39pBgcHzZIlS0o936xkuc5nnnnGDA72mryhoSFjzIw3o+200fZkoU12JwtttD1ZKMX2FBZy3GGuuuoqu91229nLLrvM3nvvvfbss8+2O+64o33wwQettdaee+659m1ve9v0+r/5zW/sDjvsYD/0oQ/Ze++911522WV2u+22s9dcc01dlxBF6nV+4xvfsHPmzLGXXnqpffzxx6c/f/zjH+u6hCCp18hpwwiE1GvctGmTXbJkiX3jG99of/7zn9sbb7zRHnDAAfZd73pXXZcQRep1Xn755XbOnDn285//vL3//vvtLbfcYpcvX26PPvroui4hyKZNm+y6devsunXrrDHGfvrTn7br1q2zDz30kLW2G7Yn9RrbaHesTb9OThtsT+o1lmF7IGoiufTSS+3SpUvt3Llz7ZFHHmlvvPHG6d9OO+00u2LFip71165da//sz/7Mzp071w4PD9svfOELFZ9xNlKuc8WKFdYYM+tz2mmnVX/iCaQ+S0obDIu16dd433332RNPPNFuv/32dsmSJfbDH/6wfeaZZyo+63RSr/Mzn/mMfeELX2i33357u+eee9pTTz3VPvLIIxWfdTw33HCD9x3rgu1Jvca22p0sz5LSBtuT5RqLtj0D1nbE7woAAACAvgYxNQAAAADoBBA1AAAAAOgEEDUAAAAA6AQQNQAAAADoBBA1AAAAAOgEEDUAAAAA6AQQNQAAAADoBBA1AAAAAOgEEDUAgFpZvXq1OeKII2o7/sqVK8173vOeqHU/+tGPmrPOOqvkMwIAZAUZhQEApTEwMOD9/bTTTjOf+9znzOTkZC2zSD/xxBPmgAMOMHfffbcZHh4Orv/kk0+a/fbbz9x9991m2bJl5Z8gACAJiBoAQGn89re/nf7/6quvNqtWrTK/+MUvppdtv/32ZuHChXWcmjHGmIsvvtjceOON5vvf/370Nn/9139t9t9/f/MP//APJZ4ZACAL6H4CAJTGHnvsMf1ZuHChGRgYmLWMdz+dfvrp5i//8i/NxRdfbHbffXezaNEic+GFF5otW7aYc845xzzvec8zS5YsMV/96ld7jvXoo4+aN7/5zWaXXXYxixcvNqeccop58MEHved31VVXmZNPPrln2TXXXGMOO+wws/3225vFixebE0880Tz99NPTv5988snmyiuvzH1vAADFA1EDAGgca9asMY899pi56aabzKc//WmzevVq8xd/8Rdml112MT/96U/NmWeeac4880yzfv16Y4wxzzzzjHnFK15hdtppJ3PTTTeZW265xey0007m1a9+tdm8ebN4jP/7v/8z99xzj1m+fPn0sscff9y89a1vNWeccYa57777zNq1a80b3vAGQx3aRx99tFm/fr156KGHyr0JAIBkIGoAAI3jec97nvnMZz5jDjroIHPGGWeYgw46yDzzzDPm/PPPNwcccIA577zzzNy5c82tt95qjJnyuAwODpqvfOUr5rDDDjOHHHKIufzyy83DDz9s1q5dKx7joYceMtZas9dee00ve/zxx82WLVvMG97wBjM8PGwOO+ww8773vc/stNNO0+u84AUvMMaYoBcIAFA9c+o+AQAA4LzoRS8yg4Mzba7dd9/dHHroodPfh4aGzOLFi82TTz5pjDHmjjvuML/+9a/Nzjvv3LOf5557ztx///3iMZ599lljjDHz58+fXnb44YebE044wRx22GHmpJNOMq961avMG9/4RrPLLrtMr7P99tsbY6a8QwCAZgFRAwBoHNttt13P94GBAXHZtm3bjDHGbNu2zRx11FHmiiuumLWvXXfdVTzG85//fGPMVDeUW2doaMj84Ac/MD/+8Y/N9ddfbz772c+aCy64wPz0pz+dHu30hz/8wbtfAEB9oPsJANB6jjzySPOrX/3K7Lbbbmb//ffv+Wijq/bbbz+zYMECc++99/YsHxgYMMcdd5y58MILzbp168zcuXPNtddeO/37PffcY7bbbjvzohe9qNRrAgCkA1EDAGg9p556qnn+859vTjnlFHPzzTebBx54wNx4443mgx/8oHnkkUfEbQYHB82JJ55obrnllullP/3pT83FF19sbr/9dvPwww+bb33rW+Z3v/udOeSQQ6bXufnmm83xxx8/3Q0FAGgOEDUAgNazww47mJtuusnss88+5g1veIM55JBDzBlnnGGeffZZs2DBAnW797znPeaqq66a7sZasGCBuemmm8xrX/tac+CBB5pPfOIT5lOf+pR5zWteM73NlVdead797neXfk0AgHSQfA8A0LdYa83LXvYyc/bZZ5u3vvWtwfX/67/+y5xzzjnm7rvvNnPmICQRgKYBTw0AoG8ZGBgwX/rSl8yWLVui1n/66afN5ZdfDkEDQEOBpwYAAAAAnQCeGgAAAAB0AogaAAAAAHQCiBoAAAAAdAKIGgAAAAB0AogaAAAAAHQCiBoAAAAAdAKIGgAAAAB0AogaAAAAAHQCiBoAAAAAdIL/D7ob61ySTTPUAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "# Here we generate the \"noisy sin wave\" but the challenge normally would be to work out what these numbers were from the raw data.\n", "amplitude = 2\n", "phase = np.pi/3\n", "freq=2\n", "numpts=1000\n", "noise=2\n", "tdata = np.linspace(0,np.pi/2, numpts)\n", "experimental_data = amplitude*np.sin(2*np.pi*freq*tdata + phase) + noise*np.random.normal(0,0.5,numpts)\n", "\n", "plt.plot(tdata, experimental_data, 'rx')\n", "plt.xlabel('Time (s)')\n", "plt.ylabel('Signal')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One way to go about this is to try and fit a model of a sine wave to the data and extract the fit parameters to find out what the phase and amplitude are. It might take a little google search but I quickly find a function in scipy Optimize toolbox which seems appropriate:\n", "\n", "Curve fit\n", "\n", "Have a look at the docs. What stands out? Here were my observations:\n", "\n", "- Assumes ydata=f(xdata, *params) + eps\n", "\n", "The equation I want to fit has to have this format. Ours does. That's not always the case. If I had a circle which was R^2 = x^2 + y^2 I'd need to rearrange or possibly look at another function. I'm not really sure what eps stands for. \n", "\n", "- The first parameter is a function, so I will need to send a function to this function. This function has to have a format which takes xdata as first input and then the coefficients as the other inputs. If I scroll down to look at the first example this confirms what I was thinking.\n", "- I need to supply x and y data to be fit\n", "- p0 means I need to supply initial guesses for the coefficients in my function. This is an optional argument so I might get away without supplying any as a first attempt.\n", "- It returns two things. `popt` is the optimal values of the coefficients which is what I want. `pcov` I'm not interested in at the moment." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### A minimal working example\n", "\n", "Next I wouldn't try to solve my problem which might be a bit complicated, but I'd just try and get a feel for using this library with the simplest possible setup. The simplest function I could fit is a straight line. I therefore make up some test data that forms a perfect straight line." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 1.0000000e+00 -2.1808451e-12]\n" ] } ], "source": [ "import numpy as np\n", "from scipy.optimize import curve_fit\n", "\n", "xdata = np.array([1,2,3,4])\n", "ydata = np.array([1,2,3,4])\n", "\n", "def straight_line(xdata, m, c):\n", " \"\"\"Equation straight line y=mx+c\"\"\"\n", " ydata = m*xdata+c\n", " return ydata\n", "\n", "popt, _ = curve_fit(straight_line, xdata, ydata) # Note _ receives pcov because not interested\n", "print(popt)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It returns a gradient of 1 and an intercept that is very close to zero and only differs due to finite precision. Now we are confident using this function lets build the model we *are* interested in." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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B7LsQ4nC+P7WQFVex/g0Tk38F4z6/exnra923739J7fYorXA38UXB7poc38z5x3k3/E6VPT96sYZqZLYdU1M2N2Rmlg1nu/MTGvdpXe9azatuv9suy21O5lFbBmv69Z9FslZ0gU9J0S+973vtW0//fTT6clPfnLH/sMeEVGZmqLNbpS+O7qM3uw+RY8Z/VNbJd5hm7V08slE3/8+0cxB6V5ZV41Ktxk2u+1OspKSld1AViHU/LWOjdFP3R70vqXX0N88+r62Ml0470E65phW0ryHJlfZz1NenzU1kWdu1K4l16MOHds0UlzEBtT6/eX6H1quDDk4U4siFMRHQ9/73s5U+1tt1coV8bWvtbI8d0Xqu2INVrWiGjm/3Qt1iHepaPVf63Lh9UnOCJJ14mF+cvyn6H1uquMd33rrVpfr//t/D3e782cRilhpM6r8Pj5viTVmpGYnomeESG7XjGRYxohEYWp3k5tD355zOB3jzqGF89unay5a1JrKdZN7ZmvGBFE1jUo33k23A2ylYdS8tjKoSNz4WRV/637U4QEfeWSrsXlkifrc69Oek+WtEeWnw+41b9ZCEyGh65SNjDfkVlIu52anhXPhw8/Hn11mo+2953e/u/VO859dsKC1WNkjDVgRcqe1SjuRE3W1zmmt+ZR6nqLEum9D3dwyN8rYmJom4NYTz6SpiSvoqU9t332LLYhe8QqiSy5RFonMGcNjlYkU1Pz7BgRgzwgRotZg1be85S1t257ylKdgsGoqssFh4bUNp07RN15zAR11VOdgxie5W+l9I6fTT90eYRES2x67rpzKXbRxt4yH/9uHzcsSDan3ltiQ//znrTEBe+7ZXkZz3Ub6P7vdSuefnzgmIOX6pOGxxEkO/TTlW4oK39jG7l15v9oKSzZA/G8rEVYJBn9mhugHPyB629uIdtyx/Wcf9SiiN7yB6LLLiB56KPP5xN4V69plN1Zsf42URINWtILv121UJkWsy+P44ph+//FxusMtpn859HJ65vb3tJXR+HjmuB/tOq3rtmaupaTVr0GM9JQQ8dN3zznnHLrlllvo5JNPpq222oruuuuu6LFDL0RkZQl4eg880FLaL3850fw5m9pehqc+tbWI2U03Ec2smCzv5c4RFkWES+h4omKZQcucNWPcw8xpU/QT91SanLiqwysacw/RwbveTmedRfSnUz6Y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AABAY0CIAAAAAKAxIEQAAAAA0BgQIgAAAABoDAgRAAAAADQGhAgAAAAAGgNCBAAAAACNASECAAAAgMbo6bVmfPb5devWNXwlAAAAAEjFt9spq8j0tBBZv369c865nXfeueErAQAAAEAu69evdwsXLgzu09OL3s3MzLh77rnHbbPNNm5kZKTUc69bt87tvPPObs2aNQO7oN4w3KNzw3GfuMfBYRjucxju0bnhuM+i90hEbv369W6HHXZwo6PhUSA9HREZHR11O+20U6W/sWDBgoGtQJ5huEfnhuM+cY+DwzDc5zDco3PDcZ9F7jEWCfFgsCoAAAAAGgNCBAAAAACNMbRCZN68eW5yctLNmzev6UupjGG4R+eG4z5xj4PDMNznMNyjc8Nxn3XcY08PVgUAAADAYDO0EREAAAAANA+ECAAAAAAaA0IEAAAAAI0BIQIAAACAxhhoIfLJT37SLVmyxM2fP9/tvffe7tprrw3uf/XVV7u9997bzZ8/3+26667u05/+dE1XWpyce/zKV77iDj30ULfddtu5BQsWuOc85znusssuq/Fqi5Fbjp7rr7/ezZkzxz3jGc+o9gJLIvc+N27c6E499VS3aNEiN2/ePPfEJz7Rffazn63paouRe4/nn3++23PPPd2WW27ptt9+e3fMMce4P/3pTzVdbT7XXHONO+KII9wOO+zgRkZG3Ne+9rXoMf1od3Lvsx9tT5Gy9PST7Slyn2XbnoEVIhdddJE7+eST3amnnupWr17tDjzwQPfCF77Q/eY3v1H3v/POO92LXvQid+CBB7rVq1e79773ve7EE090X/7yl2u+8nRy7/Gaa65xhx56qPvWt77lbrrpJnfQQQe5I444wq1evbrmK08n9x49a9euda997WvdwQcfXNOVdkeR+3zlK1/prrjiCnfOOee4W2+91V1wwQVu9913r/Gq88i9x+uuu8699rWvdccee6z72c9+5i6++GJ3ww03uDe+8Y01X3k6f/3rX92ee+7pzjzzzKT9+9HuOJd/n/1oe3Lv0dNvtqfIfZZue2hA2Xfffem4445r27b77rvTKaecou7/7ne/m3bfffe2bW9+85vp2c9+dmXX2C2596ixxx570GmnnVb2pZVG0Xs88sgj6X3vex9NTk7SnnvuWeEVlkPufV566aW0cOFC+tOf/lTH5ZVC7j1+6EMfol133bVt28c+9jHaaaedKrvGMnHO0Ve/+tXgPv1odyQp96nR67aHk3OP/WZ7OCn3WYXtGciIyKZNm9xNN93knv/857dtf/7zn+++973vqcd8//vf79j/sMMOczfeeKN76KGHKrvWohS5R8nMzIxbv369e/SjH13FJXZN0Xs899xz3e233+4mJyervsRSKHKf3/jGN9w+++zjPvjBD7odd9zR7bbbbu6d73yne/DBB+u45GyK3ONzn/tcd/fdd7tvfetbjojc73//e3fJJZe4ww8/vI5LroV+sztl0eu2pyj9ZnuKUIXt6elF74py3333uenpaff4xz++bfvjH/9497vf/U495ne/+526/+bNm919993ntt9++8qutwhF7lHykY98xP31r391r3zlK6u4xK4pco+33XabO+WUU9y1117r5szpj+pd5D7vuOMOd91117n58+e7r371q+6+++5zb33rW93//u//9uQ4kSL3+NznPtedf/757sgjj3QbNmxwmzdvdi9+8Yvdxz/+8TouuRb6ze6URa/bniL0o+0pQhW2ZyAjIp6RkZG2v4moY1tsf217L5F7j54LLrjArVy50l100UXucY97XFWXVwqp9zg9Pe1e85rXuNNOO83ttttudV1eaeSU5czMjBsZGXHnn3++23fffd2LXvQi99GPftR97nOf69moiHN593jLLbe4E0880a1YscLddNNN7tvf/ra788473XHHHVfHpdZGP9qdbugn25NKv9ueHKqwPQMp2x772Me6sbGxDk/rD3/4Q4f34XnCE56g7j9nzhz3mMc8prJrLUqRe/RcdNFF7thjj3UXX3yxO+SQQ6q8zK7Ivcf169e7G2+80a1evdqdcMIJzrnWS0NEbs6cOe473/mOW7ZsWS3XnkORstx+++3djjvu2LbM9lOe8hRHRO7uu+92T3rSkyq95lyK3OMZZ5zh9t9/f/eud73LOefc05/+dLfVVlu5Aw880J1++ukDES3oN7vTLf1ie3LpV9tThCpsz0BGRMbHx93ee+/tLr/88rbtl19+uXvuc5+rHvOc5zynY//vfOc7bp999nFz586t7FqLUuQenWt5I69//evdl770pZ7va8+9xwULFrif/OQn7uabb37kc9xxx7knP/nJ7uabb3b77bdfXZeeRZGy3H///d0999zj7r///ke2/fKXv3Sjo6Nup512qvR6i1DkHh944AE3OtpuosbGxpxzs1GDfqff7E439JPtyaVfbU8RKrE9pQ177TEuvPBCmjt3Lp1zzjl0yy230Mknn0xbbbUV3XXXXUREdMopp9DRRx/9yP533HEHbbnllvS2t72NbrnlFjrnnHNo7ty5dMkllzR1C1Fy7/FLX/oSzZkzhz7xiU/Qvffe+8jnL3/5S1O3ECX3HiX9MnI99z7Xr19PO+20E7385S+nn/3sZ3T11VfTk570JHrjG9/Y1C1Eyb3Hc889l+bMmUOf/OQn6fbbb6frrruO9tlnH9p3332buoUo69evp9WrV9Pq1avJOUcf/ehHafXq1fTrX/+aiAbD7hDl32c/2p7ce5T0i+3Jvc8qbM/AChEiok984hO0aNEiGh8fp7322ouuvvrqR7573eteR0uXLm3b/6qrrqJnPvOZND4+TosXL6ZPfepTNV9xPjn3uHTpUnLOdXxe97rX1X/hGeSWI6dfjAFR/n3+/Oc/p0MOOYS22GIL2mmnnejtb387PfDAAzVfdR659/ixj32M9thjD9piiy1o++23p6OOOoruvvvumq86ne9+97vBd2xQ7E7uffaj7SlSlpx+sT1F7rNs2zNCNCAxTgAAAAD0HQM5RgQAAAAA/QGECAAAAAAaA0IEAAAAAI0BIQIAAACAxoAQAQAAAEBjQIgAAAAAoDEgRAAAAADQGBAiAAAAAGgMCBEAAAAANAaECAAAAAAaA0IEAAAAAI0BIQIAAACAxvj/1ppqmD9cyhUAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.optimize import curve_fit\n", "import numpy as np\n", "\n", "def general_sinwave(tdata, amplitude, freq, phase):\n", " \"\"\"A function to generate a general sinwave centred about y=0\"\"\"\n", " ydata = amplitude*np.sin(2*np.pi*freq*tdata + phase)\n", " return ydata\n", "\n", "# Note I'm not interested in pcov so I assign it to _ to make this transparent\n", "popt, _ = curve_fit(general_sinwave, tdata, experimental_data)\n", "\n", "amplitude, freq, phase = popt # Use unpacking\n", "\n", "plt.plot(tdata, experimental_data, 'rx') # The \"experiment data\"\n", "plt.plot(tdata, general_sinwave(tdata, amplitude, freq, phase),'b-') # The fit to the data\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "oh dear! Not great. Go back to the docs. The initial guess `p0` was originally `None` but let's try and estimate those things we know. We know the frequency is going to be 2Hz. Looking at the docs there is also a parameter `bounds` which allows me to specify the min and max values a param can take. The format is a 2 tuple of arrays. To double check I get this format right I have a look at the examples. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGdCAYAAAAvwBgXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACV9klEQVR4nO2dd7hUxfnH39tBql0Q5WJFY0TF2JHrtUWNqbZYYk80GjWxR2FhwW40xhhjQZOoid0YjS2KYE1+FkzsFQ0IFsAAglzg3u/vj7Nzd/bdmTlzzp7t7+d59rl3z54+M+98552ZdxoAgARBEARBEMpAY7lvQBAEQRCE+kWEiCAIgiAIZUOEiCAIgiAIZUOEiCAIgiAIZUOEiCAIgiAIZUOEiCAIgiAIZUOEiCAIgiAIZUOEiCAIgiAIZaO53Dfgoqenh+bMmUMDBgyghoaGct+OIAiCIAgeAKDFixfT0KFDqbHR7fOoaCEyZ84cWm+99cp9G4IgCIIgxGDWrFk0bNgw5z4VLUQGDBhARMGDDBw4sMx3IwiCIAiCD4sWLaL11luvtx53UdFCRHXHDBw4UISIIAiCIFQZPsMqZLCqIAiCIAhlQ4SIIAiCIAhlQ4SIIAiCIAhlQ4SIIAiCIAhlQ4SIIAiCIAhlQ4SIIAiCIAhlQ4SIIAiCIAhlQ4SIIAiCIAhlQ4SIIAiCIAhlQ4RIkkyYQDRpkvm3SZOC3wVBEARB6EWESJI0NRGNH58vRiZNCrY3NZXnvgRBEAShQqnotWaqjnHjgr/jx2e/KxGSTmd/FwRBEASBiESIJI8uRiZPJlq+XESIIAiCIFhoAIBy34SNRYsW0aBBg2jhwoXVt/puW1sgQlpbibq6yn03giAIglAyotTfMkakGEyalBUhy5fbB7AKgiAIQp0jQiRp9DEhXV3BX9MAVkEQBEEQZIxIopgGppoGsAqCIAiCQEQiRJKlu9s8MFV97+4u/T0JgiAIQgUjg1UFQRAEQUgUGawqCIIgCEJVIEJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEARBEISyIUJEEASh1EyYQDRpkvm3SZOC3wWhThAhIgiCUGqamojGj88XI5MmBdubmrLbRLQINU7JhMhFF11EDQ0NdNppp5XqkoUhhV8QhGIxbhxROp0rRpQISaeD3xVRRIsgVCHNpbjICy+8QNdffz1tueWWpbhcMqjCT5RrFHRjIQiCEBdlV8aPJ5o8mWj58nwRwvdT322iRRCqkKJ7RL788ks67LDD6IYbbqBVV1212JdLjigtFkEQhDiMG0fU2hqIkNZWu13R7VFbm9ghoaYouhA56aSTaL/99qM99tgjdN+uri5atGhRzqesSOEXBKGYTJqUFSHLl9u7g4n8RYsgVBlFFSK33347vfzyy3TRRRd57X/RRRfRoEGDej/rrbdeMW/PDyn8giAUA93D2tWV74E17e8rWgShiiiaEJk1axadeuqpdOutt1KfPn28jjn33HNp4cKFvZ9Zs2YV6/b8kcIvCELSmLp5Td3Bpv19RIsgVBFFG6z60ksv0WeffUajR4/u3dbd3U1PPfUU/fa3v6Wuri5qYqO929raqK2trVi3FB1uLNR3IvGMCIIQn+5u98DU7u7sNptoIRJ7JNQERRMiu+++O7366qs5244++mgaOXIknX322XkipOKQwi8IQrFwTf/ndiWKaBGEKqRoQmTAgAG0xRZb5Gzr168frb766nnbKxIp/IIgxGXChCAEgKmxMmlSYD98YxGp/UznVP9HPacgVBAliSNSlZgKdJLGRRCE2qUYcYgktpFQo5RUiEybNq2Ul0seMQSCIPgQNwiZq7FDRNTRIYHNBDvV2lhGBbNw4UIQERYuXFjuW8mSTgNEwV/Td0EQBIWyD62tfnbCZk/07VHPKdQPPvmnRESpv0WIxEEMgSAIvig70drqt79PYyfqOYX6oUIayyJESoEYgtonlbIX3nQ6+F0QXMRttLiOk4ZQbVBM+1IBeSRK/V2y1XdrCglyVh/IqqdCIRQS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8K6jEfUZn3nmGfrRj35Exx57LL3++ut011130QsvvEDHHXdcie/cnyVLltCoUaPot7/9rdf+1Wh3iKI/ZzXanqjPqKg22xPnORO3PahRtttuO5xwwgk520aOHIlzzjnHuP9ZZ52FkSNH5mz7yU9+gh122KFo91goUZ/RxOabb46JEycmfWuJEfcZDz74YJx//vlIpVIYNWpUEe8wGaI+58MPP4xBgwZh/vz5pbi9RIj6jJdddhk22GCDnG2/+c1vMGzYsKLdY5IQEe677z7nPtVodzg+z2mi0m2PTpRnrDbbo+PznMWwPTXpEVm+fDm99NJLtNdee+Vs32uvvei5554zHvP888/n7b/33nvTiy++SCtWrCjavcYlzjNyenp6aPHixbTaaqsV4xYLJu4z3nzzzfT+++9TKpUq9i0mQpzn/Nvf/kbbbrstXXrppbTuuuvSJptsQmeccQZ99dVXpbjlyMR5xp122olmz55NDz30EAGgTz/9lO6++27ab7/9SnHLJaHa7E5SVLrtiUu12Z44FMP2VPSid3GZN28edXd309prr52zfe2116ZPPvnEeMwnn3xi3H/lypU0b948GjJkSNHuNw5xnpHzq1/9ipYsWUIHHXRQMW6xYOI847vvvkvnnHMOPf3009TcXB3ZO85zfvDBB/TMM89Qnz596L777qN58+bRT3/6U1qwYEFFjhOJ84w77bQT3XbbbXTwwQfTsmXLaOXKlfTtb3+brr766lLcckmoNruTFJVue+JQjbYnDsWwPTXpEVE0NDTkfAeQty1sf9P2SiLqMyr+8pe/0IQJE+iOO+6gtdZaq1i3lwi+z9jd3U2HHnooTZw4kTbZZJNS3V5iREnLnp4eamhooNtuu42222472nfffemKK66gP/zhDxXrFSGK9oxvvPEGnXLKKTR+/Hh66aWX6JFHHqGZM2fSCSecUIpbLRnVaHcKoZpsjy/VbnuiUAzbU5OybY011qCmpqa8ltZnn32W1/pQrLPOOsb9m5ubafXVVy/avcYlzjMq7rjjDjr22GPprrvuoj322KOYt1kQUZ9x8eLF9OKLL9KMGTPo5JNPJqKg0ACg5uZmeuyxx6izs7Mk9x6FOGk5ZMgQWnfddXOW2d5ss80IAM2ePZs23njjot5zVOI840UXXUQ777wznXnmmUREtOWWW1K/fv1ozJgxNHny5JrwFlSb3SmUarE9UalW2xOHYtiemvSItLa20ujRo+kf//hHzvZ//OMftNNOOxmP2XHHHfP2f+yxx2jbbbellpaWot1rXOI8I1HQGjnqqKPoz3/+c8X3tUd9xoEDB9Krr75Kr7zySu/nhBNOoE033ZReeeUV2n777Ut165GIk5Y777wzzZkzh7788svebe+88w41NjbSsGHDinq/cYjzjEuXLqXGxlwT1dTURERZr0G1U212pxCqyfZEpVptTxyKYnsSG/ZaYdx+++1oaWnBlClT8MYbb+C0005Dv3798OGHHwIAzjnnHBxxxBG9+3/wwQdYZZVV8POf/xxvvPEGpkyZgpaWFtx9993leoRQoj7jn//8ZzQ3N+Oaa67B3Llzez//+9//yvUIoUR9Rk61jFyP+pyLFy/GsGHDcMABB+D111/H9OnTsfHGG+O4444r1yOEEvUZb775ZjQ3N+N3v/sd3n//fTzzzDPYdtttsd1225XrEUJZvHgxZsyYgRkzZoCIcMUVV2DGjBn46KOPANSG3QGiP2c12p6oz8ipFtsT9TmLYXtqVogAwDXXXIPhw4ejtbUV22yzDaZPn97725FHHomxY8fm7D9t2jRsvfXWaG1tRXt7O6699toS33F0ojzj2LFjQUR5nyOPPLL0Nx6BqOmoUy3GAIj+nG+++Sb22GMP9O3bF8OGDcMvfvELLF26tMR3HY2oz/ib3/wGm2++Ofr27YshQ4bgsMMOw+zZs0t81/48+eSTzjJWK3Yn6nNWo+2Jk5Y61WJ74jxn0ranAagRH6cgCIIgCFVHTY4REQRBEAShOhAhIgiCIAhC2RAhIgiCIAhC2RAhIgiCIAhC2RAhIgiCIAhC2RAhIgiCIAhC2RAhIgiCIAhC2RAhIgiCIAhC2RAhIgiCIAhC2RAhIgiCIAhC2RAhIgiCIAhC2RAhIgiCIAhC2fh/oTI/5czURx4AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "popt, _ = curve_fit(general_sinwave, tdata, experimental_data, p0=[4, 2, 0], bounds=([0.5,1.9999,0],[5,2.0001,2*np.pi]))\n", "\n", "amplitude, freq, phase = popt # Use unpacking\n", "\n", "plt.plot(tdata, experimental_data, 'rx')\n", "plt.plot(tdata, general_sinwave(tdata, amplitude, freq, phase),'b-')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This gives a really nice fit. \n", "\n", "In this example I've overly laboured the point about interacting with the docs. I'll spare you this from now on, but this is the kind of approach that enables you to start with no clue how to use something and relatively quickly get to using it. It often doesn't quite work first time but this too is part of programming. Learning from what goes wrong and fixing it." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.1.2 Example 2 - Numerical integration\n", "\n", "In this example we'll numerically integrate a function between two limits. Take a look at the \"quad\" docs and see if you could piece together how you would use it." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "168.0\n", "168.0\n" ] } ], "source": [ "from scipy.integrate import quad # one-dimensional integration (first argument is variable of interest)\n", "\n", "# Quick oneliner lambda function. \n", "# Note func_to_integrate isn't called because there are no brackets.\n", "func_to_integrate = lambda x : x**3 + 3 \n", "\n", "lower_limit = 1\n", "upper_limit = 5\n", "\n", "# Numerical integration answer\n", "result_integral, _ = quad(func_to_integrate, lower_limit, upper_limit)\n", "print(result_integral)\n", "\n", "# cf with analytical answer\n", "analytical_func = lambda x : x**4 / 4 + 3*x\n", "print(analytical_func(upper_limit) - analytical_func(lower_limit))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4.2 Image Processing with scikit-image\n", "\n", "There are multiple libraries worth exploring. Two big projects are scikit-image and OpenCV. \n", "\n", "*OpenCV is written in c++ but you can use python wrappers to use it.*\n", "\n", "*Confusingly although its called scikit-image the import statement uses skimage*" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'canny edge filter')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqQAAADzCAYAAABQUgTPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABZiklEQVR4nO3dd1hT59sH8G/CCHupEIaKvg6cWKFuBWfdtdpqtVatXfiq1Z8btaDVCrVWq1JH6x4V62jVOioOtGpdUCxq3QOlIlIRENm53z/8cV6QJCQhyUng/lzXc9XmPOecO4fkzn3Gc46EiAiMMcYYY4yJRCp2AIwxxhhjrGrjgpQxxhhjjImKC1LGGGOMMSYqLkgZY4wxxpiouCBljDHGGGOi4oKUMcYYY4yJigtSxhhjjDEmKi5IGWOMMcaYqLggZYwxxhhjouKCtBKTSCSQSCSYM2eOwdYxatQoSCQS+Pr6Gmwd+hAbGytsj9jYWJ2WYS7vlTHGjGXDhg1Cbr13757Y4ehFTk4O5s6dC39/f9jb2wvvb+LEiQDKf8/8W6EbS7EDYIwxxhgzBQUFBejWrRvOnDkjdihVDhekjDHGGGMAduzYIRSjo0aNwsiRI1G9enUAEP5bUb6+vrh//z5GjhyJDRs26GWZlQEXpJUYERl8HRs2bKgyX6iq9F4ZY6wqOnLkCABALpdjzZo1sLCwKNNn1KhRGDVqlJEjq/z4GlLGGGOMMQDJyckAgLp16yotRpnhcEHKGGOMMQYgLy8PAGBlZSVyJFUPF6RGlp+fjxUrVqBz586oUaMGrK2tIZfL0bt3b2zZsgUKhULlvK+O3Hv06BGmT5+OJk2awNHRscwIck1G2WdnZ+OLL75As2bNYG9vj2rVqqFDhw5Yt24diKjc0enljSZ8NYYLFy5g6NCh8PHxgUwmg7e3N95//338/fffarfbnTt38M0336Bfv37w9fWFra0tbG1tUbt2bQwZMgSHDh1SO78+aPtejx8/jgEDBsDLywu2trZo1KgR5s2bh+zs7FLzHThwAL179xb6NW7cGBEREcjPz1cZS35+Pvbt24dx48bh9ddfh6urK6ysrFCtWjW0bt0ac+bMQVpamkbv6/fff8fAgQPh4eEBGxsb1K1bFyEhIbh16xYAIDg4GBKJBMHBwWqX8/DhQ4SGhqJly5ZwdXWFjY0NatWqhSFDhuD48eMaxcIqt9OnT+Ojjz5Cw4YN4eTkBAcHB/j5+WHAgAHYtGkTMjMzy8zz6NEjrFixAm+//Tbq168Pe3t7IXe8+eab2L59u9q8qSyH/fTTT+jatStq1KgBW1tbNGzYENOmTcPTp09VLufV7/+zZ88QFhaGJk2awN7eHi4uLujUqRO2bt2qdP5ly5YJcZw7d67cbTVo0CBIJBK4uLggJyen3P6qxMTEYPjw4ahTpw5sbW3h5OQEf39/TJs2DY8ePSp3/vT0dMyYMQN+fn6wtbWFu7s7unXrhh07dmgVhynnmXv37gl/mxMnTgAATpw4Ibz2at7X9c4Cxe/x/v37AICNGzeWWoe695+eno758+ejbdu2qF69OmQyGby8vPDmm29i9+7datf76m/TsWPH8M4776BmzZqwsrIynbsBEDOae/fuUaNGjQiAytahQwf6999/lc4/cuRIAkC1a9emP/74g6pXr15m/uPHjwv9i18LDw9XurykpCSqV6+eylj69u1Lhw8fVrpsZTEpUzKG5cuXk6WlpdJ12dnZ0YkTJ5Qu486dO2q3WXEbPnw4FRQUKF3G8ePH1b4PTWjzXiMiIkgikSiNs127dpSVlUUKhYImTJig8v307NmTCgsL1cairlWrVo1OnTql9j3Nnz9fZZyOjo7022+/UVBQEAGgoKAglctZs2YN2draqo3nww8/VPn3YZXbixcvaOjQoeV+Zl/NVYWFhSSVSsudr3v37pSVlaV03SW/+0eOHKFhw4apXE69evXo0aNHSpdT8vv/999/k6+vr8rljB07tsz8T58+JRsbGwJAn376qdrt9eTJE7K2ttaoryrPnz+nt956S+12c3BwoH379qlcxpUrV8jT01Pl/KNHj6b169cL/3/37l2lyzH1PHP37t1yP2Ml835571nVb0Xxe1TXlL3//fv3k4uLi9r5+vTpo/I7UPL7NXPmTLXvTUxckBpJVlYW1a1bV/gADBgwgPbu3UsXL16kHTt2lPqgtm3bVmkhUvwhr1atGnl5eZGDgwPNmjWLYmNj6fz587R27Vq6du2a0F9VkiciysvLo6ZNmwp9evXqRT///DNdvHiRfvnlF+rduzcBoNatWwt9KlKQtmnThiQSCfn7+9O6devowoULdPLkSfrPf/4j/ODUqlWL8vLyyizj5s2bZG1tTf369aNly5bRkSNH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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from skimage import feature\n", "\n", "\n", "# Import an image\n", "from skimage import io\n", "image = io.imread('resources/images/edges.png')[:,:,0]\n", "\n", "# Compute the Canny filter for two values of sigma\n", "edges = feature.canny(image, sigma=3)\n", "\n", "# display results\n", "fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(8, 3))\n", "\n", "ax[0].imshow(image, cmap='gray')\n", "ax[0].set_title('original image', fontsize=20)\n", "\n", "ax[1].imshow(edges, cmap='gray')\n", "ax[1].set_title(r'canny edge filter', fontsize=20)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4.3 Using requests package and NASA API to grab images from NASA server\n", "\n", "This next example is a little bit more challenging but shows you how working from your computer you can interact with data held on the other side of the world! The info I needed was found at Nasa's API page. Select `Browse APIs` and then expand the APOD (Astronomy Picture of the Day). The table tells you about information you can send or request. \n", "\n", "The requests package is a python package that allows you to send http requests. This effectively enables you to interrogate particular web sites / servers and receive information back. Many software tools (Microsoft Office365, ChatGPT), have an API (application programming interface). the api is your way to run these tools. Most of these tools require some authentication (see api_keys below) and then use a json format to send and receive information. The `GET` request is the one we are interested in. This is the request you send to the server to get information back. The `GET` request is the most common type of request. The `POST` request is the other common type of request. This is where you send information to the server.\n", "\n", "To have a go at this you'll need to register with NASA and get an api key. \n", "\n", "**Be careful with API_KEYS. If someone has your API_KEY they can access resources and pretend to be you. Store your API_KEY somewhere else on your computer and load it. Don't hard code it in and don't upload it anywhere like github.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I've stored my API_KEY in a file called nasa_api_key.json. I would do similar things with usernames and passwords. I opened a text editor and added the following. \n", " {\"API_KEY\":\"ASKDJNNwenn232kjndskjslkj2\"}\n", "\n", "(note the above is not really my API key ;-) .json is the file ending indicating the type of data stored in the file. Be careful to select *all files* when saving, or you can inadvertantly end up with a file called filename.json.txt\n", "\n", "Then in the program import the API_KEY" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "import json\n", "import os\n", "\n", "# This little trick grabs the current user which you can then slot into your filepath. I use this because my username is different on my home and work computer.\n", "user_profile = os.environ['USERPROFILE']\n", "#For MAC or LINUX this is user_profile = os.environ['HOME']\n", "\n", "# You'll need to modify this path to the place you've stored yours.\n", "apikey_filepath = user_profile + '/OneDrive - The University of Nottingham/Documents/Programming/credentials/nasa_api_key.json'\n", "with open(apikey_filepath) as f:\n", " apikey = json.loads(f.read())['API_KEY']\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we write a function that takes a keyword argument date in format 'YYYY-MM-DD'. The function uses the requests package and Nasa's API to print the description of Nasa's Astronomy Picture of the Day in the terminal. It then offers the user a choice: \"Do you want to view this picture? (Y or N). The python inbuilt function input is used to get user input to a question. If the user types Y then it finds the url of the picture and uses the library webbrowser to open the picture.\n", "\n", "*Note json.loads can turn a string that looks like a dictionary into a python dictionary*" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "ename": "IndexError", "evalue": "string index out of range", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[8], line 21\u001b[0m\n\u001b[0;32m 18\u001b[0m chrome\u001b[38;5;241m.\u001b[39mopen(url)\n\u001b[0;32m 19\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m url\n\u001b[1;32m---> 21\u001b[0m url \u001b[38;5;241m=\u001b[39m \u001b[43mnasa_apod\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdate\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m2023-01-01\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 22\u001b[0m \u001b[38;5;28mprint\u001b[39m(url)\n", "Cell \u001b[1;32mIn[8], line 15\u001b[0m, in \u001b[0;36mnasa_apod\u001b[1;34m(date)\u001b[0m\n\u001b[0;32m 13\u001b[0m want_to_view\u001b[38;5;241m=\u001b[39m\u001b[38;5;28minput\u001b[39m(description \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m Would you like to view the image? (Y / N)\u001b[39m\u001b[38;5;124m'\u001b[39m) \n\u001b[0;32m 14\u001b[0m want_to_view \u001b[38;5;241m=\u001b[39m want_to_view\u001b[38;5;241m.\u001b[39mupper()\u001b[38;5;241m.\u001b[39mlstrip()\n\u001b[1;32m---> 15\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[43mwant_to_view\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mY\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[0;32m 16\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mOpening image\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 17\u001b[0m chrome \u001b[38;5;241m=\u001b[39m webbrowser\u001b[38;5;241m.\u001b[39mget()\n", "\u001b[1;31mIndexError\u001b[0m: string index out of range" ] } ], "source": [ "import requests\n", "import webbrowser\n", "import json\n", "\n", "def nasa_apod(date='2023-01-01'):\n", " json_request = {'date':'2023-01-01', 'api_key':apikey}\n", " data =requests.get('https://api.nasa.gov/planetary/apod',params=json_request)\n", " \n", " description = json.loads(data.text)['explanation']\n", " url =json.loads(data.text)['url']\n", " \n", " # commented next section to avoid user interaction\n", " want_to_view=input(description + '\\n\\n Would you like to view the image? (Y / N)') \n", " want_to_view = want_to_view.upper().lstrip()\n", " if want_to_view[0] == 'Y':\n", " print('Opening image')\n", " chrome = webbrowser.get()\n", " chrome.open(url)\n", " return url\n", "\n", "url = nasa_apod(date='2023-01-01')\n", "print(url)\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'choices': [{'finish_reason': 'max_token',\n", " 'index': 0,\n", " 'message': {'content': 'The sky, blue, you say? But what, '\n", " 'precisely, do we mean by \"the sky\"? Is '\n", " 'it not merely a construct, a conceptual '\n", " 'framework we impose upon the vast '\n", " 'expanse of atmosphere that surrounds our '\n", " 'terrestrial existence? And \"blue\", this '\n", " 'seemingly innocuous descriptor, does it '\n", " 'not belie the complexity of wavelengths '\n", " 'and perceptions that underlie our '\n", " 'experience of color?\\n'\n", " '\\n'\n", " 'Consider, if you will, the ancient '\n", " 'Greeks, who believed the sky to be a '\n", " 'physical dome, a solid vault above the '\n", " 'earth',\n", " 'function_call': None,\n", " 'role': 'assistant'}}],\n", " 'created': 1720098916,\n", " 'model': 'llama3-70b',\n", " 'usage': {'completion_tokens': 100, 'prompt_tokens': 74, 'total_tokens': 174}}\n", "\n", "\n", "Here is my answer:\n", "\n", "The sky, blue, you say? But what, precisely, do we mean by \"the sky\"? Is it not merely a construct, a conceptual framework we impose upon the vast expanse of atmosphere that surrounds our terrestrial existence? And \"blue\", this seemingly innocuous descriptor, does it not belie the complexity of wavelengths and perceptions that underlie our experience of color?\n", "\n", "Consider, if you will, the ancient Greeks, who believed the sky to be a physical dome, a solid vault above the earth\n" ] } ], "source": [ "from llamaapi import LlamaAPI\n", "import json\n", "import pprint\n", "import os\n", "\n", "# This little trick grabs the current user which you can then slot into your filepath. I use this because my username is different on my home and work computer.\n", "user_profile = os.environ['USERPROFILE']\n", "credentials = user_profile + \"/OneDrive - The University of Nottingham/Documents/Programming/credentials/llama_api_key.json\"\n", "with open(credentials) as f:\n", " llama = LlamaAPI(json.loads(f.read())['API_KEY'])\n", "\n", "# API Request JSON Cell\n", "api_request_json = {\n", " \"model\": \"llama3-70b\",\n", " \"messages\": [\n", " {\"role\": \"system\", \"content\": \"You are a philosophical type who never gets round to really answering the question.\"},\n", " {\"role\": \"user\", \"content\": \"Why is the sky blue?\"},\n", " ]\n", "}\n", "\n", "# Make your request and handle the response\n", "response = llama.run(api_request_json)\n", "response_dict = response.json()\n", "pprint.pprint(response_dict)\n", "\n", "print(\"\\n\\nHere is my answer:\\n\")\n", "print(response_dict[\"choices\"][0][\"message\"][\"content\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4.5 GUI frameworks\n", "\n", "Sometimes using a gui can speed up your interaction with data. It also enables you to write programs that can be used by people who can't code.\n", "\n", "Python has a number of very well established gui frameworks:\n", "\n", "- tkinter \n", "Builtin gui library. Short learning curve but looks a bit clunky. Intuitive layout system.\n", "\n", "- wxPython\n", "Feature rich widgets. Bit harder to learn. \n", "\n", "- PyQt5 \n", "Python bindings to Qt. For small things like a dialogue box you have to write quite a lot of boiler plate code which makes it seem overly complex. However, for larger programs it works really well allowing you to send messages between different parts of your program really easily. The guis look like the native components on your particular operating system and so feel quite professional." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from tkinter import filedialog, Tk\n", "\n", "root=Tk()\n", "filename = filedialog.askopenfilename()\n", "root.destroy()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Learning the details of a gui framework can take some time. If it is something you really need, it is worth picking one that you like and learning it well.\n", "\n", "Some common principles:\n", "\n", "- Gui frameworks always use some kind of `event loop`. When you perform some action on a particular component e.g move a slider, click a button this triggers an `event`. Your code will need to link a callback function to a particular event that occurred on a gui component. We saw an example of this with IPyWidgets. The callback function then determines what happens.\n", "- If you have multiple gui components organising them becomes important. There are several methods that can be used, known as layout managers. These can be grids where you specify where to place the component or more commonly you produce a hierarchical series of components in which gui components are placed inside other layout components.\n", "\n", "Tip: When writing code that uses a large gui, try to keep the code that does the work separate from the code that creates the gui. Each gui component should have a callback function which separates as much as possible into two bits changes to other parts of the gui and code that can run independently of the gui." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.14" } }, "nbformat": 4, "nbformat_minor": 4 }